package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jt.mapper.ItemDescMapper;
import com.jt.pojo.Item;
import com.jt.vo.EasyUITable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.jt.mapper.ItemMapper;
import com.jt.pojo.ItemDesc;
import org.springframework.transaction.annotation.Transactional;

import java.util.Arrays;
import java.util.List;
/*VO：与页面交互的对象，返回是json*/
@Service
public class ItemServiceImpl implements ItemService {
	
	@Autowired
	private ItemMapper itemMapper;

	@Autowired
	private ItemDescMapper itemDescMapper;

	/**
	 * 1.后端查询数据库记录
	 * 2.将后端数据通过调用转化为vo对象
	 * 3.前端通过解析vo对象
	 * @param page
	 * @param rows
	 * @return
	 *
	 * sql分析：规定每页20条
	 * 			语法：select * from tb_item limit 起始位置从0开始，查询行数（0~19:20条记录）
	 * 			1.第一页查询 select * from tb_item limit 0,20
	 *
	 */
	/*@Override
	public EasyUITable findItemByPage(Integer page, Integer rows) {
		//total 获取数据库总记录数
		//rows 用户查询分业后的结果
		*//*分页起始位置*//*
		int startIndex=(page-1)*rows;
		List<Item> itemList=itemMapper.findItemByPage(startIndex, rows);
		//total 获取数据库总记录数
		Long total=Long.valueOf(itemMapper.selectCount(null));
		return new EasyUITable(total, itemList);
	}*/

	/**
	 * MP实现分页 使用IPage接口
	 * @param page
	 * @param rows
	 * @return
	 */
	@Override
	public EasyUITable findItemByPage(Integer page, Integer rows) {
		//1.需要使用MP方式进行分页
		IPage<Item> iPage=new Page<>(page,rows);
		/*按照更新时间排序*/
		QueryWrapper<Item> queryWrapper=new QueryWrapper<>();
		queryWrapper.orderByDesc("updated");
		//MP通过分页操作的相关数据统一封装到IPage对象中
		iPage=itemMapper.selectPage(iPage,queryWrapper);
		Long total=iPage.getTotal();
		List<Item> itemList=iPage.getRecords();
		return new EasyUITable(total,itemList);
	}
	@Transactional    //控制事务
	@Override
	public void saveItem(Item item,ItemDesc itemDesc) {
		/*Date date=new Date();
		item.setStatus(1).setCreated(date).setUpdated(date);*/
		itemMapper.insert(item); //执行入库操作，动态生成id
		//实现主键回显  可以通过标签配置实现，也可以通过MP实现
		itemDesc.setItemId(item.getId());  //商品描述id和商品id保持一致
		itemDescMapper.insert(itemDesc);
	}
	//一般更新操作都是根据主键更新
	//sql：update tb_item set
	@Override
	public void updateItem(Item item, ItemDesc itemDesc) {
		//根据对象中不为null的元素充当set条件
		itemMapper.updateById(item);
		itemDesc.setItemId(item.getId());
		itemDescMapper.updateById(itemDesc);
	}

	//批量删除操作
	@Override
	public void deleteItems(Long [] ids) {
		List<Long> idList= Arrays.asList(ids);
		/*itemMapper.deleteBatchIds(idList);*/
		//手动删除数据
		itemMapper.deleteItems(ids);
		itemDescMapper.deleteBatchIds(idList);
	}

	@Override
	public void updateStatus(Integer status, Long[] ids) {
		/*Item item=new Item();
		item.setStatus(status);
		QueryWrapper<Item> queryWrapper=new QueryWrapper<>();
		queryWrapper.in("id", Arrays.asList(ids));
		itemMapper.update(item, queryWrapper);*/
		itemMapper.updateStatus(status, ids);
	}

	@Override
	public ItemDesc findItemDescById(Long itemId) {
		return itemDescMapper.selectById(itemId);
	}
}
